OPEN_CFI := -flto -fvisibility=hidden -fsanitize=cfi
CFI_LOG := -fno-sanitize-trap=cfi
OPEN_LTO := -flto
ifeq ($(O), )
O := g
endif

all:


test1 := ./test1.c ./ok.c ./not_ok.c ./ok_2.c
test2 := ./test2.c ./ok.c ./not_ok.c ./ok_2.c
test3 := ./test3.c ./ok.c ./not_ok.c ./ok_2.c

all_target := test1 test2 test3
all_target += $(addprefix nocfi_, $(all_target))

nocfi_test1: $(test1)
	clang -g -O$(O) $(OPEN_LTO) $^ -o $@

nocfi_test2: $(test2)
	clang -g -O$(O) $(OPEN_LTO) $^ -o $@

nocfi_test3: $(test3)
	clang -g -O$(O) $(OPEN_LTO) $^ -o $@

test1: $(test1)
	clang -g -O$(O) $(OPEN_CFI) $^ -o $@

test2: $(test2)
	clang -g -O$(O) $(OPEN_CFI) $^ -o $@

test3: $(test3)
	clang -g -O$(O) $(OPEN_CFI) $^ -o $@

all_dump := $(addsuffix .O$(O).dump, $(all_target))
dump: $(all_dump) $(all_target)

$(all_dump): %.O$(O).dump : %
	llvm-objdump -d -S $< > $@

clean:
	rm -f $(all_target) *.o

all: clean dump

.PHONY: clean all dump
